/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.activiti.designer.export.srcm.export;
import javax.xml.stream.XMLStreamWriter;
import org.apache.commons.lang.StringUtils;
import org.eclipse.bpmn2.AlfrescoMailTask;
import org.eclipse.bpmn2.BoundaryEvent;
import org.eclipse.bpmn2.MailTask;
import org.eclipse.emf.ecore.EObject;
/**
* @author Tijs Rademakers
*/
public class MailTaskExport implements ActivitiNamespaceConstants {
public static void createMailTask(EObject object, XMLStreamWriter xtw) throws Exception {
if(object instanceof AlfrescoMailTask) {
writeAlfrescoScriptMailTask((AlfrescoMailTask) object, xtw);
} else {
writeServiceMailTask((MailTask) object, xtw);
}
}
private static void writeAlfrescoScriptMailTask(AlfrescoMailTask mailTask, XMLStreamWriter xtw) throws Exception {
// start AlfrescoMailTask element
xtw.writeStartElement("serviceTask");
xtw.writeAttribute("id", mailTask.getId());
if (mailTask.getName() != null) {
xtw.writeAttribute("name", mailTask.getName());
}
xtw.writeAttribute(ACTIVITI_EXTENSIONS_PREFIX, ACTIVITI_EXTENSIONS_NAMESPACE,
"class", "org.alfresco.repo.workflow.activiti.script.AlfrescoScriptDelegate");
DefaultFlowExport.createDefaultFlow(mailTask, xtw);
AsyncActivityExport.createDefaultFlow(mailTask, xtw);
xtw.writeStartElement("extensionElements");
ExtensionListenerExport.createExtensionListenerXML(mailTask.getActivitiListeners(), false, EXECUTION_LISTENER, xtw);
xtw.writeStartElement(ACTIVITI_EXTENSIONS_PREFIX, "field", ACTIVITI_EXTENSIONS_NAMESPACE);
xtw.writeAttribute("name", "script");
xtw.writeStartElement(ACTIVITI_EXTENSIONS_PREFIX, "string", ACTIVITI_EXTENSIONS_NAMESPACE);
xtw.writeCharacters(createMailScript(mailTask));
xtw.writeEndElement();
xtw.writeEndElement();
xtw.writeEndElement();
MultiInstanceExport.createMultiInstance(mailTask, xtw);
// end AlfrescoMailTask element
xtw.writeEndElement();
if(mailTask.getBoundaryEventRefs().size() > 0) {
for(BoundaryEvent event : mailTask.getBoundaryEventRefs()) {
BoundaryEventExport.createBoundaryEvent(event, xtw);
}
}
}
private static String createMailScript(AlfrescoMailTask mailTask) {
StringBuilder mailBuilder = new StringBuilder();
mailBuilder.append("var mail = actions.create(\"mail\");\n");
if(StringUtils.isNotEmpty(mailTask.getTo())) {
mailBuilder.append("mail.parameters.to = ")
.append(mailTask.getTo())
.append(";\n");
}
if(StringUtils.isNotEmpty(mailTask.getToMany())) {
mailBuilder.append("mail.parameters.to_many = ")
.append(mailTask.getToMany())
.append(";\n");
}
if(StringUtils.isNotEmpty(mailTask.getSubject())) {
mailBuilder.append("mail.parameters.subject = ")
.append(mailTask.getSubject())
.append(";\n");
}
if(StringUtils.isNotEmpty(mailTask.getFrom())) {
mailBuilder.append("mail.parameters.from = ")
.append(mailTask.getFrom())
.append(";\n");
}
if(StringUtils.isNotEmpty(mailTask.getTemplate())) {
mailBuilder.append("mail.parameters.template = ")
.append(mailTask.getTemplate())
.append(";\n");
}
if(StringUtils.isNotEmpty(mailTask.getTemplateModel())) {
mailBuilder.append("mail.parameters.template_model = ")
.append(mailTask.getTemplateModel())
.append(";\n");
}
if(StringUtils.isNotEmpty(mailTask.getText())) {
mailBuilder.append("mail.parameters.text = ")
.append(mailTask.getText())
.append(";\n");
}
if(StringUtils.isNotEmpty(mailTask.getHtml())) {
mailBuilder.append("mail.parameters.html = ")
.append(mailTask.getHtml())
.append(";\n");
}
mailBuilder.append("mail.execute(bpm_package);\n");
return mailBuilder.toString();
}
private static void writeServiceMailTask(MailTask mailTask, XMLStreamWriter xtw) throws Exception {
// start MailTask element
xtw.writeStartElement("serviceTask");
xtw.writeAttribute("id", mailTask.getId());
if (mailTask.getName() != null) {
xtw.writeAttribute("name", mailTask.getName());
}
DefaultFlowExport.createDefaultFlow(mailTask, xtw);
AsyncActivityExport.createDefaultFlow(mailTask, xtw);
xtw.writeAttribute(ACTIVITI_EXTENSIONS_PREFIX, ACTIVITI_EXTENSIONS_NAMESPACE, "type", "mail");
xtw.writeStartElement("extensionElements");
ExtensionListenerExport.createExtensionListenerXML(mailTask.getActivitiListeners(), false, EXECUTION_LISTENER, xtw);
if (mailTask.getTo() != null && mailTask.getTo().length() > 0) {
writeField("to", mailTask.getTo(), xtw);
}
if (mailTask.getFrom() != null && mailTask.getFrom().length() > 0) {
writeField("from", mailTask.getFrom(), xtw);
}
if (mailTask.getSubject() != null && mailTask.getSubject().length() > 0) {
writeField("subject", mailTask.getSubject(), xtw);
}
if (mailTask.getCc() != null && mailTask.getCc().length() > 0) {
writeField("cc", mailTask.getCc(), xtw);
}
if (mailTask.getBcc() != null && mailTask.getBcc().length() > 0) {
writeField("bcc", mailTask.getBcc(), xtw);
}
if (mailTask.getHtml() != null && mailTask.getHtml().length() > 0) {
writeCDataField("html", mailTask.getHtml(), xtw);
}
if (mailTask.getText() != null && mailTask.getText().length() > 0) {
writeCDataField("text", mailTask.getText(), xtw);
}
xtw.writeEndElement();
MultiInstanceExport.createMultiInstance(mailTask, xtw);
// end MailTask element
xtw.writeEndElement();
if(mailTask.getBoundaryEventRefs().size() > 0) {
for(BoundaryEvent event : mailTask.getBoundaryEventRefs()) {
BoundaryEventExport.createBoundaryEvent(event, xtw);
}
}
}
private static void writeField(String name, String expression, XMLStreamWriter xtw) throws Exception {
xtw.writeStartElement(ACTIVITI_EXTENSIONS_PREFIX, "field", ACTIVITI_EXTENSIONS_NAMESPACE);
xtw.writeAttribute("name", name);
xtw.writeAttribute("expression", expression);
xtw.writeEndElement();
}
private static void writeCDataField(String name, String text, XMLStreamWriter xtw) throws Exception {
xtw.writeStartElement(ACTIVITI_EXTENSIONS_PREFIX, "field", ACTIVITI_EXTENSIONS_NAMESPACE);
xtw.writeAttribute("name", name);
xtw.writeStartElement(ACTIVITI_EXTENSIONS_PREFIX, "expression", ACTIVITI_EXTENSIONS_NAMESPACE);
xtw.writeCData(text);
xtw.writeEndElement();
xtw.writeEndElement();
}
}